package Client;

import java.net.*;
import java.io.*;

public class Rafraichissement extends Thread
{
	private String m_adrServeur;
	private int m_portServeur;
	
	private DatagramSocket m_sockRafraichissement;
	
	private String m_listeUsers;
	
	//constructeur
	public Rafraichissement(String adrServeur, int portServeur, String listeUsers)
	{
		m_adrServeur = adrServeur;
		m_portServeur = portServeur;
		m_listeUsers = listeUsers;
		
		initialisationSocketUDP();//ouverture du port UDP de rafraichissement coté client
		this.start();
	}

	  //methode run du thread
	public void run()
	{
		int timeout = 1000;  //temps d'attente de rafraichissement est 1s
		int taille = 1024;
		byte buffer[] = new byte[taille];
		
		byte[] msg = "vie".getBytes();
		
		while(true)
		{				  
			        //reception de la nouvelle liste des connectés
				  try{
					  DatagramPacket paquetRecu = new DatagramPacket(buffer, buffer.length);
					  /** http://www.jmdoudoux.fr/java/dej/chap-net.htm */
					  m_sockRafraichissement.setSoTimeout(timeout);
					  m_sockRafraichissement.receive(paquetRecu);
					  m_listeUsers = new String(paquetRecu.getData(), 0, paquetRecu.getLength());
					  System.out.println("Nouvelle liste = "+m_listeUsers);
				  }catch(Exception e){}
				  
				    //envoie du signe de vie
				  try{
					    DatagramPacket paquetEnvoie = new DatagramPacket(msg, msg.length, InetAddress.getByName(m_adrServeur), m_portServeur);
	    	            m_sockRafraichissement.send(paquetEnvoie);
			          }catch(Exception e){}
				  
				    //gestion de la mise en attente du processus
				  try{
	  	    	         Thread.sleep(5000);
			          }catch(Exception e){}	  
		 }
	 }
	
	//ouverture du port UDP de rafraichissement coté client
	void initialisationSocketUDP()
	{
		int port = m_portServeur;
		boolean estValidPort = false;
	    while(!estValidPort)
	    {
	    	try
	    	{
	    	  m_sockRafraichissement = new DatagramSocket(port);
	    	  estValidPort = true;
	    	}catch(SocketException e){
	    	         	port++;
	    	        }
	    }
	}

}
